﻿#ifndef __CMutexDefault_H__
#define __CMutexDefault_H__
#include <lampe/types.h>
#include "CMutex.h"

#ifdef _IRR_WINDOWS_
#include <windows.h>
#endif

#ifdef _IRR_COMPILE_WITH_X11_DEVICE_
#include <pthread.h>
#endif

namespace lampe{
namespace thread{

/***
* @class CMutexDefault
* Класс реализующий нормальный мьютекс. Не контралирует повторный захват мьютекса
* одним и тем же потоком. При повторном захвате мьютекса одним и тем же потоком ошибка НЕ возникнит,
* но выполнение блокируется
*/

class CMutexDefault: public CMutex{
private:
	bool locked;
#ifdef _IRR_WINDOWS_
CRITICAL_SECTION m_CriticalSection;
#endif
#ifdef _IRR_COMPILE_WITH_X11_DEVICE_
	pthread_mutex_t m_mutex;//! мьютекс
#endif
public:
	virtual void lock();
	virtual void unlock();
	virtual bool isLocked();

	CMutexDefault();
	~CMutexDefault();
};


}//namespace thread
}//namespace irr

#endif
